<?php
/**
 * Push统计类(数据库模型)
 *   
 * @author wenqiang@6rooms.com
 * @version $Id: Push.class.php,v 1.0 2013/11/5 13:58:55 gaowenqiang Exp $   
 * @package sr.model.stat
 *
 */
class Sr_Model_Stat_Push extends Hw_Model_Message
{
	const STAT_TYPE_DAY = 1;// 按天统计
	const STAT_TYPE_HOUR = 2;// 按小时统计
	const STAT_TYPE_HALFHOUR = 3;// 按半小时统计

	/**
	 * 统计并返回结果
	 *
	 * @param int $statType 统计时间类型
	 * @param string $start 开始时间(标准日期时间格式)
	 * @param string $start 结束时间(标准日期时间格式)
	 * @param int $prod 产品id
	 * @return array
	 */
	public function stat($statType, $start, $end, $prod = null)
    {
		if (!in_array((int)$statType, array(self::STAT_TYPE_DAY,
											self::STAT_TYPE_HOUR,
											self::STAT_TYPE_HALFHOUR)))
		{
			return false;
		}
		
		$cond = array();
		if (!strlen($start) || !strlen($end)) {
			return false;
		} else {
			$cond['start'] = $start;
			$cond['end'] = $end;
		}

		if (!is_null($prod) && !((int)$prod > 0)) {
			return false;
		} else {
			$cond['prod'] = $prod;
		}

		// 生成条件
		$where = 'WHERE ' . $this->getWhere($cond);

		// 生成列
		$columnExprs = array(
			'prod',
			'COUNT_SUCCESS', 
			'AVG_SPEND_TIME_SUCCESS',
			'COUNT_FAIL', 
			'AVG_SPEND_TIME_FAIL',
			'COUNT_PENDING'
		);
		// 分组统计列
		switch ((int)$statType) {
			case self::STAT_TYPE_DAY :
				$groupExpr = 'STAT_COL_DATE';
				break;
			case self::STAT_TYPE_HOUR :
				$groupExpr = 'STAT_COL_HOUR';
				break;
			case self::STAT_TYPE_HALFHOUR :
				$groupExpr = 'STAT_COL_HALFHOUR';
				break;
			default:
				return false;
		}
		$columnExprs[$groupExpr] = 'stat_col';
		$column = $this->column($columnExprs);

		$from = $this->name;
		$group = "GROUP BY stat_col";
		$order = "ORDER BY stat_col DESC";
		$sql = $this->sql($column, $from, $where, $group, $order);

		return $this->fetchAssoc($sql);
    }
	
}
